package dfbz.Map接口;

import java.util.HashMap;
import java.util.Map;
/*
*java.util.Map<K,V>集合    接口
*   特点:
*       1、双列集合，一个元素包含两个值
*       2、key和value可以相同 也可以不相同
*       3、key不能重发，value可以重复
*       3、key和value是一对的
*
* java.util.HashMap<K,V>
*    特点:
*       1、HashMap底层实现时哈希表 查询快
*       2、 jdk8之前  数组+单向链表
*            jdk8之后  数组+单向聊边+红黑树
*
*       3、无序的集合，存储的元素顺序不一致
*
*  HashMap 子类值 java.util.LinkedHashMap<K,V>
*      1、底层实现哈希表+链表
*      2、有序的集合，存取的元素的顺序一致
*
* Map接口中定义了很多方法，常用的如下：
  -public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
  -public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除，返回被 删除元素的值。
  -public V get(Object key) 根据指定的键，在Map集合中获取对应的值。
  -boolean containsKey(Object key) 判断集合中是否包含指定的键。
  -public Set<K> keySet() : 获取Map集合中所有的键，存储到Set集合中。
  -public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集 合)。
* */
//使用put方法时，若指定的键(key)在集合中没有，则没有这个键对应的值，返回null，并把指定的 键值添加到集合中

public class Demo01 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("黄晓明", "杨颖");
        map.put("刘恺威", "杨幂");
        map.put("吴奇隆", "刘诗诗");
        map.put("吴奇隆", "刘诗诗2");//覆盖吴奇隆的妻子 刘诗诗-> 刘诗诗2
        demo01(map);
        demo02(map);
        demo03(map);
        demo04(map);
    }

    private static void demo04(Map<String, String> map) {
        boolean a = map.containsKey("刘恺威");
        boolean b = map.containsKey("杨洋");
        System.out.println("是否有刘恺威:" + a);
        System.out.println("是否有杨洋:" + b);
    }

    private static void demo03(Map<String, String> map) {
        String s = map.get("刘恺威");
        System.out.println("从key值刘恺威获取后返回的是:" + s);
    }

    private static void demo02(Map<String, String> map) {
        String s = map.remove("吴奇隆");
        System.out.println("移除key值吴奇隆返回的值为;" + s);
        System.out.println("移除后的map:" + map);
    }

    private static void demo01(Map<String, String> map) {
        System.out.println(map);
    }
}
